// pages/songDetail/songDetail.js
import dayjs from 'dayjs' // 引入格式化时间
import PubSub from 'pubsub-js' // 引入订阅发布者模式
import request from "../../../utils/request";
import { getSongInfo, setSongInfo } from "../../../utils/localCache";
Page({
  /**
   * 页面的初始数据
   */
  data: {
    isPaly: false, // 判断歌曲是否播放
    // isAnimation: false, // 动画状态
    songInfo: [], //歌曲详情
    songUrl: {}, // 歌曲播放地址
    songStart: '00:00', // 歌曲起始时间
    songEnd: '00:00', // 歌曲结束时间
    pmgressbar: 0 // 歌曲进度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getSongInfo();
    // 获取当前背景音乐播放器实例  背景音乐小程序切小屏也能播放
    this.backgroundAudioManager = wx.getBackgroundAudioManager();
    // 监听音乐播放/暂停/停止
    this.backgroundAudioManager.onPlay(() => {
      this.isSong(true)
    })
    this.backgroundAudioManager.onPause(() => {
      this.isSong(false)
    })
    this.backgroundAudioManager.onStop(() => {
      this.isSong(false)
    })
    // 监听播放结束的事件
    this.backgroundAudioManager.onEnded(() => {
      // 切换下一首
      PubSub.publish('switchType', 'next');
      this.setData({
        songStart: '00:00', // 歌曲起始时间
        songEnd: '00:00', // 歌曲结束时间
        pmgressbar: 0 // 歌曲进度
      })
    })

    // 订阅recommendSong发来的数据
    PubSub.subscribe('switchData', (msg, data) => {
      // 存入不能本地
      setSongInfo(data)
      // 获取歌曲播放地址
      this.getSongUrl(data.id)
      // 同步传来的数据
      this.setData({ songInfo: data, isPaly: false, })
      // 切换歌曲时格式化时间
      this.setData({ songEnd: dayjs(data.dt).format('mm:ss') })
      // 动态设置播放页面标题
      wx.setNavigationBarTitle({
        title: data.ar[0].name,
      });
    })

    //  动态监听当前歌曲播放进度 
    this.backgroundAudioManager.onTimeUpdate(() => {
      // 必须在歌曲url设置后才能使用
      this.setData({ songStart: dayjs(this.backgroundAudioManager.currentTime * 1000).format('mm:ss') })
      // 动态设置 歌曲进度条
      let pmgressbar = this.backgroundAudioManager.currentTime / this.backgroundAudioManager.duration
      this.setData({ pmgressbar: pmgressbar * 100 })
    })
    
  },

  /**
   *  从本地取出歌曲列表点击所保存的歌曲信息
   */
  async getSongInfo() {
    // 本地出去歌曲信息
    const newSongInfo = await getSongInfo();
    let { songInfo } = this.data;
    songInfo = JSON.parse(JSON.stringify(newSongInfo)).data;
    this.setData({ songInfo });
    // 格式化时间
    this.setData({ songEnd: dayjs(songInfo.dt).format('mm:ss') })
    console.log(this.data.songInfo);
    // 调用获取歌曲的函数
    this.getSongUrl(songInfo.id, songInfo.name);
  },

  /**
   *  获取歌曲播放地址
   */
  async getSongUrl(id) {
    const { data } = await request("/song/url", { id });
    this.setData({ songUrl: data });
    this.songPlay()
  },

  /**
   * 点击播放音乐
   */
  songPlay() {
    let isPaly = !this.data.isPaly
    // 播放
    if (isPaly) {
      const { songInfo, songUrl } = this.data
      // 设置音乐播放地址
      this.backgroundAudioManager.src = songUrl[0].url



      //  必填否则不播放
      this.backgroundAudioManager.title = songInfo.name
      // 开启播放
      this.backgroundAudioManager.play()
    } else {
      // 暂停播放
      this.backgroundAudioManager.pause()
    }
    this.isSong(isPaly)
  },
  // 设置歌曲播放状态
  isSong(isPaly) {
    this.setData({ isPaly })
  },
  /**
   * 点击切换歌曲
   */
  async netxSong(e) {
    // 点击切歌立即暂停歌曲
    this.backgroundAudioManager.pause()
    // 发布 recommendSong 订阅的数据(触发自定义事件)
    PubSub.publish('switchType', e.currentTarget.id);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() { },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() { },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() { },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() { },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() { },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() { },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() { },
});
